#include <stdio.h>
// 位域的成员类型必须是整数类型
struct Status
{
  unsigned int flag1 : 1; // 1位标志位
  unsigned int flag2 : 1; // 1位标志位
  unsigned int mode : 2;  // 2位模式位
  char data : 4;          // 4位有符号位域
  unsigned int data2 : 4; // 4位无符号位域
};

int main()
{
  struct Status s;
  s.flag1 = 1;             // 赋值1
  s.flag2 = 0;             // 赋值0
  s.mode = 3;              // 赋值3 由于是2位，最大值为3
  s.data = 9;              // 赋值9 由于是4位，最大值为15（1111）
  s.data2 = 9;             // 赋值9 由于是4位，最大值为15（1111）
  printf("%d\n", s.data);  // 输出-7
  printf("%d\n", s.data2); // 输出9

  struct
  {
    unsigned int x : 5;
    unsigned int y : 3;
  } var = {3, 7};
  printf("%u %u", var.x, var.y);

  return 0;
}